package com.emmmya.ocs.modules.system.security.service;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.emmmya.ocs.common.base.BaseService;
import com.emmmya.ocs.modules.system.security.entity.UrlFilter;

import java.util.List;
import java.util.Map;

/**
 * @author laijieguan
 */
public interface DynamicPermissionService extends BaseService<UrlFilter,Long> {
    /**
     * 资源权限的配置字符串模板
     */
    public static final String PREMISSION_STRING="perms[{0}]";
    /**
     * 角色权限的配置字符串模板
     */
    public static final String ROLE_STRING="roles[{0}]";

    /**
     * 初始化时获取当前已定义的filterchains
     */
    void init();

    /**
     * 更新框架资源权限配置，需要线程同步,此方法会动态添加definitions
     * 如果有重复的url，新的map将覆盖以前的map
     * 也就是说，以前链接的权限配置会被新的权限配置覆盖
     */
     void updatePermission(Map<String, String> newDefinitions);

     void updateOnePermission(Map<String,String> addMap) throws Exception;
    /**
     * 需要线程同步,此方法会加载静态配置，DynamicPermissionDao查询出来的配置
     *
     */
    void reloadPermission();

    /**
     * 查询数据库维护的接口与权限关系
     */
    List<UrlFilter> selectByVO(UrlFilter vo);

    /**
     * 分页查询
     */
    void getListByPage(Page<UrlFilter> page, Wrapper<UrlFilter> wrapper);

    /**
     * 查询数据库的api数据，更新系统的权限
     */
    void updateSystemApi() throws Exception;

    /**
     * 删除数据库的uri，同时移除系统uri，还需要前端点击"刷新本地权限"按钮才会刷新
     * @param id
     */
    void deleteAndCheck(Long id);
}